'''
Created on 28/10/2013

@author: daniel
'''
import resolvedorDeLaberinto
import colecciones.listaEnlazada
import ej1DefinicionDeGrafo.grafo
import ej1DefinicionDeGrafo.vertice


def main():

    print "Armando laberinto..."
    
    laberinto=ej1DefinicionDeGrafo.grafo.Grafo()
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(1,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                        )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(2,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(3,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(4,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(5,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(6,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(7,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(8,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                        )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(9,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(10,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(11,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(12,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(13,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(14,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(15,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(16,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(17,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(18,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.agregarVertice(
             ej1DefinicionDeGrafo.vertice.Vertice(19,
                      colecciones.listaEnlazada.ListaEnlazada()
                                )
                      )
    laberinto.conectar(laberinto.vertice(0), laberinto.vertice(1), 0)# 1 con 2
    laberinto.conectar(laberinto.vertice(1), laberinto.vertice(2), 0)# 2 con 3
    laberinto.conectar(laberinto.vertice(1), laberinto.vertice(8), 0)# 2 con 9
    laberinto.conectar(laberinto.vertice(8), laberinto.vertice(7), 0)# 9 con 8
    laberinto.conectar(laberinto.vertice(8), laberinto.vertice(9), 0)# 9 con 10
    laberinto.conectar(laberinto.vertice(7), laberinto.vertice(3), 0)# 8 con 4
    laberinto.conectar(laberinto.vertice(3), laberinto.vertice(4), 0)# 4 con 5
    laberinto.conectar(laberinto.vertice(5), laberinto.vertice(6), 0)# 6 con 7
    laberinto.conectar(laberinto.vertice(6), laberinto.vertice(9), 0)# 7 con 10
    laberinto.conectar(laberinto.vertice(9), laberinto.vertice(13), 0)# 10 con 14
    laberinto.conectar(laberinto.vertice(13), laberinto.vertice(12), 0)# 14 con 13
    laberinto.conectar(laberinto.vertice(12), laberinto.vertice(11), 0)# 13 con 12
    laberinto.conectar(laberinto.vertice(11), laberinto.vertice(10), 0)# 12 con 11
    laberinto.conectar(laberinto.vertice(10), laberinto.vertice(14), 0)# 11 con 15
    laberinto.conectar(laberinto.vertice(14), laberinto.vertice(15), 0)# 15 con 16
    laberinto.conectar(laberinto.vertice(11), laberinto.vertice(18), 0)# 12 con 19
    laberinto.conectar(laberinto.vertice(12), laberinto.vertice(16), 0)# 13 con 17
    laberinto.conectar(laberinto.vertice(16), laberinto.vertice(17), 0)# 17 con 18
    laberinto.conectar(laberinto.vertice(17), laberinto.vertice(13), 0)# 18 con 14
    
    '''
    inicializa conexiones inversas
    '''   
    laberinto.conectar(laberinto.vertice(1), laberinto.vertice(0), 0)# 2 con 1
    laberinto.conectar(laberinto.vertice(2), laberinto.vertice(1), 0)# 3 con 2
    laberinto.conectar(laberinto.vertice(8), laberinto.vertice(1), 0)# 9 con 2
    laberinto.conectar(laberinto.vertice(7), laberinto.vertice(8), 0)# 8 con 9
    laberinto.conectar(laberinto.vertice(9), laberinto.vertice(8), 0)# 10 con 9
    laberinto.conectar(laberinto.vertice(3), laberinto.vertice(7), 0)# 4 con 8
    laberinto.conectar(laberinto.vertice(4), laberinto.vertice(3), 0)# 5 con 4
    laberinto.conectar(laberinto.vertice(6), laberinto.vertice(5), 0)# 7 con 6
    laberinto.conectar(laberinto.vertice(9), laberinto.vertice(6), 0)# 10 con 7
    laberinto.conectar(laberinto.vertice(13), laberinto.vertice(9), 0)# 14 con 10
    laberinto.conectar(laberinto.vertice(12), laberinto.vertice(13), 0)# 13 con 14
    laberinto.conectar(laberinto.vertice(11), laberinto.vertice(12), 0)# 12 con 13
    laberinto.conectar(laberinto.vertice(10), laberinto.vertice(11), 0)# 11 con 12
    laberinto.conectar(laberinto.vertice(14), laberinto.vertice(10), 0)# 15 con 11
    laberinto.conectar(laberinto.vertice(15), laberinto.vertice(14), 0)# 16 con 15
    laberinto.conectar(laberinto.vertice(18), laberinto.vertice(11), 0)# 19 con 12
    laberinto.conectar(laberinto.vertice(16), laberinto.vertice(12), 0)# 17 con 13
    laberinto.conectar(laberinto.vertice(17), laberinto.vertice(16), 0)# 18 con 17
    laberinto.conectar(laberinto.vertice(13), laberinto.vertice(17), 0)# 14 con 18
    
    sist=resolvedorDeLaberinto.ResolvedorDeLaberinto()
    
    print "Para entrar por:"
    print laberinto.vertice(0)
    print "y salir por:"
    print laberinto.vertice(18)
    print "se recorren"
    print sist.minimoDeEncrucijadas(laberinto, laberinto.vertice(0),laberinto.vertice(18))
    print "encrucijadas"
    print "Finalizando..."

if __name__ == '__main__':
    main()